/**
 * 资源路径修复工具
 * 用于在打包后自动修复HTML中的图片路径
 */

const path = require('path');
const fs = require('fs');

/**
 * 获取正确的资源路径
 */
function getAssetPath(relativePath) {
  // 移除开头的 ./ 或 ../
  const cleanPath = relativePath.replace(/^\.\.?[\/\\]/, '').replace(/^assets[\/\\]/, '');
  
  // 构建绝对路径
  const assetPath = path.join(__dirname, '../assets', cleanPath);
  
  // 验证文件是否存在
  if (!fs.existsSync(assetPath)) {
    console.warn(`资源文件不存在: ${assetPath}`);
  }
  
  // 转换为正确的格式
  return assetPath.replace(/\\/g, '/');
}

/**
 * 修复页面中所有图片的路径
 */
function fixImagePaths() {
  // 等待DOM加载完成
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', () => fixImagePaths());
    return;
  }

  // 查找所有img标签
  const images = document.querySelectorAll('img');
  
  images.forEach(img => {
    const originalSrc = img.getAttribute('src');
    
    // 只处理相对路径的assets资源
    if (originalSrc && (originalSrc.includes('assets/') || originalSrc.includes('./') || originalSrc.includes('../'))) {
      try {
        // 提取文件名
        const fileName = originalSrc.split('/').pop();
        
        // 设置新路径
        const newSrc = getAssetPath(fileName);
        img.setAttribute('src', newSrc);
        
        // 添加错误处理
        img.onerror = function() {
          console.error(`图片加载失败: ${originalSrc} -> ${newSrc}`);
          // 设置默认图片
          this.src = getAssetPath('404.svg');
        };
      } catch (error) {
        console.error(`处理图片路径失败: ${originalSrc}`, error);
      }
    }
  });

  console.log(`✅ 已修复 ${images.length} 个图片路径`);
}

// 自动执行修复
fixImagePaths();

// 监听DOM变化，处理动态添加的图片
const observer = new MutationObserver(mutations => {
  mutations.forEach(mutation => {
    mutation.addedNodes.forEach(node => {
      if (node.nodeType === 1) { // 元素节点
        // 检查是否是img标签
        if (node.tagName === 'IMG') {
          const src = node.getAttribute('src');
          if (src && (src.includes('assets/') || src.includes('./') || src.includes('../'))) {
            const fileName = src.split('/').pop();
            node.setAttribute('src', getAssetPath(fileName));
          }
        }
        
        // 检查子元素中的img标签
        const imgs = node.querySelectorAll && node.querySelectorAll('img');
        if (imgs) {
          imgs.forEach(img => {
            const src = img.getAttribute('src');
            if (src && (src.includes('assets/') || src.includes('./') || src.includes('../'))) {
              const fileName = src.split('/').pop();
              img.setAttribute('src', getAssetPath(fileName));
            }
          });
        }
      }
    });
  });
});

// 开始观察
observer.observe(document.body || document.documentElement, {
  childList: true,
  subtree: true
});

module.exports = {
  getAssetPath,
  fixImagePaths
};
